package luo.hui.jiang.recursion;

/**
 * @author 罗惠江
 * @version 1.0
 * @email 1511619294@qq.com
 * @date 2020/7/29 14:39
 */
public class MiGong {
    public static void main(String[] args) {
        // 初始化我们的迷宫
        int[][] map = new int[8][7];
        //  先吧我门迷宫的围墙用 1 来表示

        // 先把上下的围墙设置为 1
        for (int i = 0; i < 7; i++) {
            map[0][i] = 1;
            map[7][i] = 1;

        }

        // 接着是左右的围墙
        for (int i = 0; i < 8; i++) {
            map[i][0] = 1;
            map[i][6] = 1;
        }

        // 设置挡板，1 表示
        map[3][1] = 1;
        map[3][2] = 1;
        map[2][2] = 1;
        // 输出地图
        showMap(map);

        // 开始递归找出口
        setWay(map, 1, 1);

        // 查看走过的路
        showMap(map);

    }

    /**
     * @param map 表示地图
     * @param i   从哪个行坐标位置开始找
     * @param j   从哪个列坐标位置开始找
     * @return
     */
    public static boolean setWay(int[][] map, int i, int j) {
        if (map[6][5] == 2) {
            return true;
        } else {
            if (map[i][j] == 0) { // 表示当前没有走过这个位置
                // 1.策略， 下》右》上》左 走
                map[i][j] = 2; // 先假设这条路可以走通，
                if (setWay(map, i + 1, j)) { // 先向下走
                    return true;
                } else if (setWay(map, i, j + 1)) { // 向右走
                    return true;
                } else if (setWay(map, i - 1, j)) { // 先上走
                    return true;
                } else if (setWay(map, i, j - 1)) { // 向左走
                    return true;
                } else {
                    // 说明这条路是走不通的，是死路
                    map[i][j] = 3;
                    return false;
                }
            } else {  // 如果不为 0 可能是 1， 2， 3 ，这些情况都返回false
                return false;
            }
        }
    }

    public static void showMap(int[][] map) {
        // 输出地图
        System.out.println("地图的情况");
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 7; j++) {
                System.out.print(map[i][j] + " ");
            }
            System.out.println();
        }
    }

}
